package com.wuxl.ffmpeg;

/**
 * Description:
 *
 * @author 诸葛小猿
 * @date 2024-12-18
 */

import java.io.File;

/**
 * ffmpeg相关工具类
 */
public class FFMpegShellUtil {
    /**
     * ffmpeg是否存在
     * @return
     */
    public static boolean isFFMpegReadied() {
        //电脑本地的ffmpeg的地址
        String ffmpegPath = "H:\\ffmpeg-7.0.2-full_build\\bin\\ffmpeg.exe";
        File file = new File(ffmpegPath);
        boolean exists = file.exists();
        System.out.println("ffmpeg工具准备状态：" + exists);
        return exists;
    }

    /**
     * 构造ffmpeg指令
     * @param startTime 开始时间 00:01:00
     * @param input     源文件 video.mp4
     * @param durTime   裁剪时长 00:02:00
     */
    public static String createCutShell(String input, String startTime, String durTime) {
        String shell;
        //输出文件名称
        String output = getOutputName(input, startTime, durTime);
        System.out.println("剪辑输出视频文件的地址："+output);
        //系统名称
        String systemName = getSystemName();
        //ffmpeg指令参数说明（ss 起始时间 | i 指定要转换的文件 | t 裁剪时长 | c 操作方式，copy | y 覆盖已存在的文件）
        if (systemName.contains("windows")) { //windows系统
            shell = String.format("H:\\ffmpeg-7.0.2-full_build\\bin\\ffmpeg.exe -ss %s -i %s -t %s -vcodec copy -acodec copy %s -y", startTime, input, durTime, output);
        } else { //其他系统
            throw new RuntimeException("系统错误");
        }
        return shell;
    }

    /**
     * 获取输出文件名称
     * @param input     源文件 video.mp4
     * @param startTime 开始时间 00:01:00
     * @param durTime   裁剪时长 00:02:00
     * @return
     */
    private static String getOutputName(String input, String startTime, String durTime){
        String[] arr = input.split("\\.");
        String name = arr[0];
        String suffix = arr[1];
        String start = startTime.replaceAll(":","");
        String dur = durTime.replaceAll(":","");
        return name+"_"+start+"_"+dur+"."+suffix;
    }

    /**
     * 获取系统平台名称：windows、linux...
     */
    private static String getSystemName() {
        return System.getProperty("os.name").toLowerCase();
    }
}

